/**
 Do not return anything, modify nums in-place instead.
 [1,0,1,0,3,12]
 */
function moveZeroes(nums: number[]): void {
    let nonZeroIndex = 0;

    // 第一次遍历：将所有非零元素移到前面
    for (let i = 0; i < nums.length; i++) {
        if (nums[i] !== 0) {
            nums[nonZeroIndex] = nums[i];
            nonZeroIndex++;
        }
    }

    // 第二次遍历：将所有零元素移到后面
    for (let i = nonZeroIndex; i < nums.length; i++) {
        nums[i] = 0;
    }
}

// 推荐
function moveZeroes1(nums: number[]): void {
    let j = 0;

    for (let i = 0; i < nums.length; i++) {
        if (nums[i] !== 0) {
            // 交换非零元素到正确位置
            if (i !== j) {
                [nums[j], nums[i]] = [nums[i], nums[j]];
            }
            j++;
        }
    }
}